package com.hruiworks.campusgroup.service;

import com.hruiworks.campusgroup.common.PageVO;
import com.hruiworks.campusgroup.manager.entity.ActivityData;
import com.hruiworks.campusgroup.pojo.entity.Activity;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hruiworks.campusgroup.common.BaseUser;
import com.hruiworks.campusgroup.pojo.entity.Administrator;
import com.hruiworks.campusgroup.pojo.entity.User;
import com.hruiworks.campusgroup.pojo.query.ActivityPageQuery;
import com.hruiworks.campusgroup.pojo.query.ActivityQuery;
import com.hruiworks.campusgroup.pojo.request.ActivityCreateRequest;
import com.hruiworks.campusgroup.pojo.request.ActivityUpdateRequest;

import java.util.List;

/**
 * @author jiushui
 * @description 针对表【activity(活动表)】的数据库操作Service
 * @createDate 2025-02-15 10:33:56
 */
public interface ActivityService extends IService<Activity> {

    /**
     * 用户申请活动
     *
     * @param activityCreateRequest 申请活动必要信息
     * @param userId                当前登录用户id
     * @return 申请提交情况
     */
    Boolean applyForActivity(ActivityCreateRequest activityCreateRequest, Long userId);

    /**
     * 查询活动
     *
     * @param activityQuery 查询条件封装
     * @return 查询的列表
     */
    List<Activity> listActivity(ActivityQuery activityQuery);

    /**
     * 管理员创建活动
     *
     * @param activityCreateRequest 创建活动必要信息
     * @param administrator       当前登录管理员
     * @return 创建情况
     */
    Boolean createActivity(ActivityCreateRequest activityCreateRequest, Administrator administrator);

    /**
     * 查询活动
     *
     * @param activityQuery 查询条件封装
     * @param baseUser 调用者
     * @return 查询的列表
     */
    List<Activity> listActivity(ActivityQuery activityQuery, BaseUser baseUser);

    /**
     * 审核活动
     * @param activityId 活动id
     * @param reviewState 审核状态
     * @param administrator 当前管理员信息
     * @return 操作结果
     */
    Boolean reviewActivity(Long activityId , Integer reviewState ,Administrator administrator);

    /**
     * 更新活动
     * @param activityUpdateRequest 活动更新请求体
     * @param administrator 当前登录的管理员
     * @return 操作结果
     */
    Boolean updateActivity(ActivityUpdateRequest activityUpdateRequest, Administrator administrator);

    /**
     * 删除活动
     * @param activityId 待删除活动后的id
     * @param administrator 管理员信息
     * @return 操作结果
     */
    Boolean deleteActivity(Long activityId, Administrator administrator);


    /**
     * 分页查询活动
     * @param activityPageQuery 分页查询条件
     * @param baseUser 调用者
     * @return  封装信息
     */
    PageVO<Activity> listPageActivity(ActivityPageQuery activityPageQuery, BaseUser baseUser);

    /**
     * 分页查询活动
     * @param activityPageQuery 分页查询条件
     * @return 封装信息
     */
    PageVO<Activity> listPageActivity(ActivityPageQuery activityPageQuery);


    /**
     * 根据活动id查询
     * @param activityId 活动id
     * @return 活动信息
     */
    Activity oneActivity(Long activityId);

    /**
     * 获取历史活动参与情况
     * @param size 单页大小
     * @param current 当前页
     * @param searchValue 活动搜索
     * @param user 当前用户
     * @return 分页封装
     */
    PageVO<ActivityData> selfHistoryActivityData(Long size, Long current,String searchValue, User user);


    /**
     * 更新各活动评分
     *
     * @return 全部更新完成返回true，否则为false
     */
    Boolean updateActivityGrade();
}
